package com.yc.oop7;

import java.util.Random;
import java.util.Scanner;

//TODO: 作业: 为玩家添加一个属性: 复活币.  默认为1     当输入错误,或者,超时的时候,循环玩家,是否使用复活币
//如果使用,则继续游戏,复活币-1          不使用,则游戏结束
//复活币不够?  充钱
public class Game {
	private Player p;
	private Scanner sc = new Scanner(System.in);
	
	public void startGame() {
		p = new Player();
		
		System.out.println("游戏开始");
		//先循环所有的游戏的关卡
		for(int i = 0; i < LevelParams.levels.length; i++) {
			//取出这一关
			Level level = LevelParams.levels[i];
			System.out.println("\n第"+level.getLevelNo()+"关:");
			//这一关开始的时候,先获取一下时间
			long startTime = System.currentTimeMillis();
			//开始答题    这个循环   循环这一关需要输入正确多少次
			for(int j = 0; j < level.getCount(); j++) {
				String outStr = printStr( level.getStrLength() );
				//接收用户输入
				String inStr = sc.next();
				
				//判断是否正确
				if(  showResult(outStr, inStr) ) {
					//TODO: 时间   还要判断一下,是否超时  
					//System.currentTimeMillis()  获取当前时间戳
					long currentTime = System.currentTimeMillis();		//毫秒数
					if( (currentTime - startTime) / 1000  >  level.getTimes() ) {
						//超时了
						System.out.println("您输入太慢,已经超时,游戏结束");
						System.out.println("输入错误, 游戏结束, 您的最终成绩为:" + p.getScore());
						System.exit(1);
					}
					
					p.setScore( p.getScore() + level.getScore() );
					System.out.println("输入正确,您的当前得分为:" + p.getScore());
				}else {
					System.out.println("输入错误, 游戏结束, 您的最终成绩为:" + p.getScore());
					System.exit(1);
				}
			}
			//将这一关结束的时间,转换为 分数
			long endTime = System.currentTimeMillis();
			int useTime = (int) ((endTime - startTime) / 1000);
			int score = (level.getTimes() - useTime) * level.getScore() / 5;
			System.out.println("您这一关剩余时间为:" + (level.getTimes() - useTime) + "秒, 已为你转换分数");
			p.setScore( p.getScore() + score );
			System.out.println("恭喜过关,您的积分为:" + p.getScore());
		}
		System.out.println("\n恭喜通关");
	}
	
	//判断是否正确
	private boolean showResult(String outStr, String inStr) {
		//字符串的比较,不要用==  要用equals方法
		if( outStr.equals(inStr) ) {
			return true;
		}else {
			return false;
		}
	}

	//输出随机字符串
	public String printStr(int strLength) {
		String str = "";
		Random r = new Random();
		for(int i = 0; i < strLength; i++) {
			//先看概率
			if( r.nextDouble() < 0.4 ) {
				//小写字母
				int num = r.nextInt(26) + 97;
				str += (char)num;
			}else if( r.nextDouble() < 0.8 ) {
				//大写字母
				int num = r.nextInt(26) + 65;
				str += (char)num;
			}else {
				//20%是数字
				int num = r.nextInt(10);
				str += num;
			}
		}
		
		System.out.println( str );
		return str;
	}
}
